A network storage system is a processing system that is used to store and retrieve data on behalf of one or more hosts on a network. A storage system operates on behalf of one or more hosts to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks or tapes. Some storage systems are designed to service file-level requests from hosts, as is commonly the case with file servers used in a network attached storage (NAS) environment. Other storage systems are designed to service block-level requests from hosts, as with storage systems used in a storage area network (SAN) environment. Still other storage systems are capable of servicing both file-level requests and block-level requests, as is the case with certain storage servers made by NetApp, Inc. of Sunnyvale, Calif.
One common use of storage systems is data replication. Data replication is a technique for backing up data in which a given data set at a source is replicated at a destination that is often geographically remote from the source. The replica data set created at the destination storage system is called a “mirror” of the original data set on the source storage system. Typically replication involves the use of at least two storage systems, e.g., one at the source and another at the destination, which communicate with each other through a computer network or other type of data interconnect.
Each data block in a given set of data, such as a file in a storage system, can be represented by both a physical block, pointed to by a corresponding physical block pointer, and a logical block, pointed to by a corresponding logical block pointer. These two blocks are actually the same data block. However, the physical block pointer indicates the actual physical location of the data block on a storage medium, whereas the logical block pointer indicates the logical position of the data block within the data set (e.g., a file) relative to other data blocks.
In some replication systems, replication is done at a logical block level. In these systems, the replica at the destination storage system has the identical structure of logical block pointers as the original data set at the source storage system, but it may (and typically does) have a different structure of physical block pointers than the original data set at the source storage system. To execute a logical replication, the file system of the source storage system is analyzed to determine changes that have occurred to the file system. The changes are transferred to the destination storage system. This typically includes “walking” the directory trees at the source storage system to determine the changes to various file system objects within each directory tree, as well as identifying the changed file system object's location within the directory tree structure. The changes are then sent to the destination storage system in a certain order (e.g., directories before subdirectories, and subdirectories before files, etc.) so that the directory tree structure of the source storage system is preserved at the destination storage system. Updates to directories of the source file system are received and processed at the destination storage system before updates to the files in each of the directories can be received and processed.
A number of problems exist if the changes are received at the destination storage system in an order that is not consistent with the file system hierarchy. For example, if updates to data in files are received before the updates to the directories that contain the files, then the files are essentially “orphaned” because the destination storage system does not know which directory should be used to store the updates. That is, updates to the data in the file cannot be processed correctly before the directory referencing the file exists on the destination storage system. Similarly, if a file is deleted on the source storage system and a new directory is created at the same file system address, the replication system will send one message indicating the delete operation and another message indicating the create operation. If the messages are received out of order, the destination system will be directed to create a directory at a file system location that already contains a file, resulting in an error condition. In another case, if a file is created at an unused file system address and then modified, the replication system will send a first message indicating the create operation and a second operation indicating the modify operation. If the messages are received out of order, the destination system will be directed to modify a file at an unused file system location, resulting in an error condition.